public class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int[] nums = new int[m+n];
        int p1 = 0, p2 = 0, i = 0;
        while(p1 < m || p2 < n){
            if(p1 < m && p2 < n){
                if(nums1[p1] < nums2[p2]){
                    nums[i] = nums1[p1];
                    p1++;
                } else {
                    nums[i] = nums2[p2];
                    p2++;
                }
            } else if(p1 < m){
                nums[i] = nums1[p1];
                p1++;
            } else {
                nums[i] = nums2[p2];
                p2++;
            }
            i++;
        }
        for(int j = 0; j < m+n; j++){
            nums1[j] = nums[j];
        }

    }
    //逆向双指针
    public void merge2(int[] nums1, int m, int[] nums2, int n) {
        int p1 = m-1, p2 = n-1, cur = m + n - 1;
        while(p1 >= 0 || p2 >= 0){
            if(p1 < 0){
                nums1[cur] = nums2[p2];
                p2--;
            } else if(p2 < 0){
                nums1[cur] = nums1[p1];
                p1--;
            } else if(nums1[p1] > nums2[p2]){
                nums1[cur] = nums1[p1];
                p1--;
            } else {
                nums1[cur] = nums2[p2];
                p2--;
            }
            cur--;
        }
    }
}
